package com.zhijian.wharf.service;


import com.zhijian.util.page.Page;
import com.zhijian.wharf.entity.po.OfficeGroup;
import com.zhijian.wharf.entity.vo.request.OfficeGroupSearchVo;
import com.zhijian.wharf.entity.vo.response.OfficeGroupVo;

import java.util.List;

/**
 * 科室组织 业务处理层
 *
 * @author HCG
 * @version 1.0
 * @date 2022-01-01 15:41:01
 */
public interface OfficeGroupService {

    /**
     * 主键查询
     *
     * @param id
     * @return
     */
    OfficeGroup selectById(Long id);

    /**
     * 主键查询vo
     *
     * @param id
     * @return
     */
    OfficeGroupVo selectVoById(Long id);

    /**
     * 根据名称查询
     *
     * @param name
     * @return
     */
    OfficeGroup selectByName(String name);

    /**
     * 按照主键删除
     *
     * @param id
     */
    void deleteById(Long id);

    /**
     * 新增
     *
     * @param officeGroup
     * @return
     */
    Long insert(OfficeGroup officeGroup);

    /**
     * 更改
     *
     * @param officeGroup
     * @return
     */
    boolean update(OfficeGroup officeGroup);

    /**
     * 总数
     *
     * @param officeGroupSearchVo
     * @return
     */
    Integer count(OfficeGroupSearchVo officeGroupSearchVo);

    /**
     * 列表
     *
     * @param officeGroupSearchVo
     * @return
     */
    List<OfficeGroupVo> selectList(OfficeGroupSearchVo officeGroupSearchVo);

    /**
     * 分页展示
     *
     * @param officeGroupSearchVo
     * @return
     */
    Page<OfficeGroupVo> selectPage(OfficeGroupSearchVo officeGroupSearchVo);

    /**
     * 最后渲染的树形数据
     *
     * @return
     */
    List<OfficeGroupVo> renderTreeList();

    /**
     * 列表，返回LocationVo
     *
     * @param parentId 父id，可为null，null的时候查询全部
     * @return
     */
    List<OfficeGroupVo> selectListByParentId(Long parentId);

    /**
     * 根据一个父id，拼出所有的子级id，加自己
     *
     * @param ids
     * @param parentId
     * @return
     */
    List<Long> concatIdsByParentId(List<Long> ids, Long parentId);

    /**
     * 根据一个父id，拼出所有的子级id，加自己
     *
     * @param parentId
     * @return
     */
    List<Long> concatIdsByParentId(Long parentId);

    /**
     * 根据名称查找
     *
     * @param name
     * @return
     */
    OfficeGroupVo selectVoByName(String name);
}